package com.itheima.execption;

import com.itheima.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 全局异常处理器
 * 处理controller 请求的所有异常的类
 */
@RestControllerAdvice //处理器通知类
@Slf4j
public class ExecptionControllerAdvice {

    //怎么处理异常？处理哪些异常？
    //此方法会在controller 出现RuntimeException以及他的子异常的时候执行此方法
    @ExceptionHandler(RuntimeException.class)//异常处理 -作用:处理哪些异常？
    public R ex1(RuntimeException ex){
        log.error("出现了RuntimeException。。。"); //给程序员查看的
        ex.printStackTrace();
        return new R(1,ex.getMessage(),null); //给用户查看的
    }

    //怎么处理异常？处理哪些异常？
    //此方法会在controller 出现RuntimeException以及他的子异常的时候执行此方法
    @ExceptionHandler(Exception.class)//异常处理 -作用:处理哪些异常？
    public R ex2(Exception ex){
        log.error("出现了RuntimeException。。。"); //给程序员查看的
        ex.printStackTrace();
        return new R(1,ex.getMessage(),null); //给用户查看的
    }

    //怎么处理异常？处理哪些异常？
    //此方法会在controller 出现RuntimeException以及他的子异常的时候执行此方法
    @ExceptionHandler(NullPointerException.class)//异常处理 -作用:处理哪些异常？
    public R ex3(NullPointerException ex){
        log.error("出现了RuntimeException。。。"); //给程序员查看的
        ex.printStackTrace();
        return new R(1,ex.getMessage(),null); //给用户查看的
    }
}
